/**
 * http://usejsdoc.org/
 * 处理table排序问题
 */
exports.handler=function(data){
	/**
	 * 算法：
	 * 1.给所有的table加上order排序字段，
	 * 2.给所有带引用（有外建的）的表加上引用表的order
	 * 3.进行排序
	 */
	var item,index=1;
	var arr=[];
	for(var i in data.tables){
		item=data.tables[i];
		item.order=index++;
		arr.push(item);
	}
	
	for(var i in data.tables){
		item=data.tables[i];
		var fields=[].concat(item.field);
		fields.forEach(function(f){
			var rtable = f.attr["@_references_table"];
			var rcol = f.attr["@_references_col"];
			if(rtable&&rcol){
				assert(data.tables[rtable],`表${i}引用${rtable}不存在`)
				// 检查引用的正确性
				if(![].concat(data.tables[rtable].field,data.tables[rtable].id).some(function(item){
					return item.attr["@_name"]==rcol;
				})){
					throw new Error("外建引用错误表"+rtable+"中没有字段"+rcol);
				}
				
				item.order+=data.tables[rtable].order;
				// item.order+=1;//data.tables[rtable].order;
			}
		});
	}
	
	data.orderTable=arr.sort(function(obj1,obj2){
		return obj1.order-obj2.order;
	}).map(function(item){
		return item.attr["@_name"];
	});
}